Skip to content

fix(coordination,#19922): post_dossier -- porte de re-stamp de domaine pour un DEEP sur READY secretariat - #19964

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/19922-post-dossier-deep-secretariat-restamp
Oct 8, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/19922-post-dossier-deep-secretariat-restamp

Conversation

@jsboige

@jsboige jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard -- lane myia-ai-01:CoursIA-2 -- prev: MED/coordination #19945

Summary

Le correctif attendu par #19922 : post_dossier.py refusait le dossier de domaine qu'exige la garde merge pour un Grain: DEEP, parce que l'anti-double-stamp interdit tout re-stamp tier sur un rc 0 (READY) intact. Deux gardes se contredisaient : la garde merge refuse un DEEP dont le dossier vient du secretariat (#19612), et le poster refusait le dossier de domaine qualifiant qui devait le remplacer. Mesuré sur #19801 et #19838.

La porte ouverte est étroite et conditionnelle — le re-stamp d'une lane qualifiée sur un rc 0 reste refusé par défaut, SAUF si les trois conditions de l'issue sont réunies :

  1. la PR porte Grain: DEEP (lu via grain_tag.parse_grain_tag, la grammaire unique variation-tag-guard: le tag en forme de titre ## Grain est illisible par l'organe (38% des merges non attribués) #9485) ;
  2. le dossier intact qui tient le gate vient du secretariat (SECRETARIAT_LANES = {"myia-po-2026:CoursIA-3"}) ;
  3. le nouveau dossier porte supersedes + supersedes-why non vides — la refutation explicite exigée du rc 3 (fix(coordination): post_dossier refuse de refuter un dossier BLOCKED pose par une lane a l'arret #19420), le gate juge ensuite la refutation comme pour toute contradiction muette (check_adjoint_prevalidation : un dossier qui contredit un dossier precedent doit le nommer (invariant C de #17020) #18934).

Fichiers

  • scripts/coordination/post_dossier.py : constante SECRETARIAT_LANES, helper grain_tier_of(), le fetch du body de PR regroupé avec headRefOid (un seul appel pr view), la branche elif de la porte dans l'anti-double-stamp, docstring point 6 mis à jour.
  • scripts/tests/test_post_dossier.py : GhRouter étendu (pr_body), et les contrôles positif/négatifs ci-dessous.

Contrôles (exigés par l'issue)

  • Positif — rejeu causal du refus Fix(qc,#19744): aligne la prose QC-Py-19 sur la sortie reexecutee (cellules 36 et 40) #19801 (test_rc0_secretariat_deep_with_supersedes_posts_through) : gate rc 0, dossier intact du secretariat, PR Grain: DEEP, supersedes + supersedes-why renseignés → le refus tombe, le POST part, sortie au rc du gate rejoué.
  • Négatif MED (test_rc0_secretariat_med_with_supersedes_refused) : même configuration mais PR Grain: MED → refus conservé (la porte est réservée au DEEP).
  • Négatif sans refutation (test_rc0_secretariat_deep_without_supersedes_refused) : DEEP sur dossier secretariat mais sans supersedes/supersedes-why → refus conservé.
  • Le contrôle négatif préexistant test_double_stamp_rc0_with_supersedes_refused (rc 0, lane NON-secretariat, supersedes renseignés) reste rouge : pas de guerre de dossiers hors la porte.

Preuve d'exécution

python -m pytest scripts/tests/test_post_dossier.py -q
20 passed in 0.39s

Suite intégrale du module (les contrôles préexistants inchangés passent : ligne 1 parasite, REPLACE_WITH, tête périmée, rc 3 avec/sans supersedes, PAYLOAD-TRAP, chemins nominaux PR/issue). py_compile OK sur les fichiers modifiés.

Non-applicabilités assumées

  • Familles closure (--issue) : la porte ne s'applique qu'à la famille PR (le contrat secretariat/DEEP est une affaire de dossier ADJOINT) — la branche exige family is ADJOINT.
  • Aucun changement côté merge_ready.py ni check_adjoint_prevalidation.py : la garde merge (refus DEEP-secretariat) reste telle quelle, c'est le poster qui cesse de contredire.

See #19922

🤖 Generated with Claude Code

…e pour un DEEP sur READY secretariat

La garde merge refuse un DEEP dossiere par le secretariat (#19612) et
l'anti-double-stamp refusait le dossier de domaine de l'adjoint qui
devait le remplacer : le DEEP sur dossier secretariat etait impostable
(mesure sur #19801 et #19838). Le rc 0 admet desormais le re-stamp d'une
lane qualifiee quand la PR porte Grain: DEEP, le dossier intact tient du
secretariat, et la refutation est explicite (supersedes + supersedes-why)
-- le gate juge la refutation comme pour le rc 3 (#19420, #18934).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA-2 a deja consomme son budget LIGHT du jour (axe genre G-VAR-2/3 (light-genre, quel que soit le tier declare) : #19649 (MED/guard, merge a 2026-10-08T01:57:15Z), #19530 (MED/guard, merge a 2026-10-08T06:20:05Z), #19833 (MED/docs, merge a 2026-10-08T10:30:07Z), #19640 (MED/guard, merge a 2026-10-08T10:37:41Z), #19385 (MED/guard, merge a 2026-10-08T10:39:13Z), #19589 (MED/guard, merge a 2026-10-08T10:41:15Z), #19769 (MED/guard, merge a 2026-10-08T10:47:00Z), #19770 (MED/guard, merge a 2026-10-08T10:47:58Z), #19812 (LIGHT/guard, merge a 2026-10-08T10:51:10Z), #19258 (MED/docs, merge a 2026-10-08T11:01:54Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions github-actions Bot added variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) labels Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-ai-01:CoursIA-2` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-08) :

  • TIER-INFLATION : declared LIGHT << effective LIGHT-genre (tally : declared=2 genre=10 cap=6)
  • GENRE-RUN : run consecutif d'un genre LIGHT (voir signals.runs dans le log du job)
  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=2 genre=10 cap=6)

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19964
head: f173a8d
complete: true
body: read
comments-reviewed: 3
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 829899f561f6469d1e1120c0112e2ecc9693968173284a0ca8ca4a87358223ad
diff-files: 2
diff-additions: 102
diff-deletions: 6
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19964
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lecture finale complete, B.0 clear. Validation independante a la tete exacte : 20/20 tests passes, py_compile rc0. Porte limitee a ADJOINT, DEEP, dossier secretariat et supersedes explicites ; lanes qualifiees et gate post-POST restent refuses fermes ailleurs. Ce correctif retablit la possibilite du dossier de domaine exige par le merge sans modifier la garde de merge.

@myia-ai-01
myia-ai-01 merged commit a4cb48b into main Oct 8, 2026
20 of 22 checks passed
@jsboige
jsboige deleted the fix/19922-post-dossier-deep-secretariat-restamp branch October 16, 2026 12:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants